home *** CD-ROM | disk | FTP | other *** search
-
- /*
- * SPRINT.C
- *
- * DNET (c)Copyright 1988, Matthew Dillon, All Rights Reserved.
- *
- * PRINTER SERVER
- *
- * Accepting one connection at a time, dump the file to PRT:
- *
- * DNET_WRITE must be 6 or higher for this function to work.
- */
-
- #include "defs.h"
-
- void printfile ARGS((void *));
-
- int
- brk()
- {
- return(0);
- }
-
- void
- #ifdef LATTICE
- _main(str)
- #else
- _main(len,str)
- #endif
- char *str;
- {
- PORT *port;
- PROC *myproc = (PROC *)FindTask(NULL);
- void *chan;
- long mask, rmask;
-
- onbreak(brk);
-
- if (strncmp(str, "__dnet", 6) != 0) {
- Version("SPrint", VERSION, SPRINT_VERSION);
- _exit(0);
- }
-
- port = DListen(PORT_PRINTER);
- WaitPort(&myproc->pr_MsgPort);
- ReplyMsg(GetMsg(&myproc->pr_MsgPort));
-
- mask = SIGBREAKF_CTRL_C|(1 << port->mp_SigBit);
- for (;;) {
- rmask = Wait(mask);
- if (rmask & SIGBREAKF_CTRL_C)
- break;
- while (chan = DAccept(port)) {
- if (GetEnvVal(DNET_WRITE) >= 6) {
- DWrite(chan, "Accepted\n", 9);
- printfile(chan);
- } else {
- DWrite(chan, "Permission Denied\n", 18);
- }
- DClose(chan);
- }
- }
- DUnListen(port);
- }
-
- void
- printfile(chan)
- void *chan;
- {
- long n, fh;
- char rc = 0;
- char buf[256];
-
- if (fh = Open("PRT:", 1006)) {
- rc = 1;
- while ((n = DRead(chan, buf, 256)) > 0) {
- if (Write(fh, buf, n) != n) {
- rc = 0;
- break;
- }
- }
- Close(fh);
- }
- DWrite(chan, &rc, 1);
- }
-
-